package com.example.controller;

import com.example.common.PageResult;
import com.example.common.Result;
import com.example.entity.QRCodeCategory;
import com.example.service.QRCodeCategoryService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 二维码分类控制器
 */
@RestController
@RequestMapping("/api/category")
public class QRCodeCategoryController {

    @Resource
    private QRCodeCategoryService qrCodeCategoryService;

    /**
     * 获取分类列表
     *
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 分类列表
     */
    @GetMapping("/list")
    public Result<PageResult<QRCodeCategory>> list(
            @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
            @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
        // 计算偏移量
        int offset = (pageNum - 1) * pageSize;
        // 查询分类列表
        List<QRCodeCategory> categories = qrCodeCategoryService.queryAllByLimit(new QRCodeCategory(), offset, pageSize);
        // 查询总记录数
        long total = qrCodeCategoryService.count(new QRCodeCategory());
        // 返回分页结果
        return PageResult.restPage(pageNum, pageSize, total, categories);
    }

    /**
     * 获取所有启用的分类
     *
     * @return 分类列表
     */
    @GetMapping("/enabled")
    public Result<List<QRCodeCategory>> getEnabledCategories() {
        List<QRCodeCategory> categories = qrCodeCategoryService.queryEnabled();
        return Result.success(categories);
    }

    /**
     * 获取分类详情
     *
     * @param id 分类ID
     * @return 分类详情
     */
    @GetMapping("/detail/{id}")
    public Result<QRCodeCategory> detail(@PathVariable("id") Long id) {
        QRCodeCategory category = qrCodeCategoryService.queryById(id);
        if (category != null) {
            return Result.success(category);
        } else {
            return Result.error("分类不存在");
        }
    }

    /**
     * 添加分类
     *
     * @param category 分类信息
     * @return 添加结果
     */
    @PostMapping("/add")
    public Result<QRCodeCategory> add(@RequestBody QRCodeCategory category) {
        if (category.getName() == null || category.getName().trim().isEmpty()) {
            return Result.validateFailed("分类名称不能为空");
        }
        QRCodeCategory insertedCategory = qrCodeCategoryService.insert(category);
        return Result.success(insertedCategory);
    }

    /**
     * 更新分类信息
     *
     * @param category 分类信息
     * @return 更新结果
     */
    @PutMapping("/update")
    public Result<QRCodeCategory> update(@RequestBody QRCodeCategory category) {
        if (category.getId() == null) {
            return Result.validateFailed("分类ID不能为空");
        }
        if (category.getName() == null || category.getName().trim().isEmpty()) {
            return Result.validateFailed("分类名称不能为空");
        }
        QRCodeCategory updatedCategory = qrCodeCategoryService.update(category);
        return Result.success(updatedCategory);
    }

    /**
     * 删除分类
     *
     * @param id 分类ID
     * @return 删除结果
     */
    @DeleteMapping("/delete/{id}")
    public Result<String> delete(@PathVariable("id") Long id) {
        boolean success = qrCodeCategoryService.deleteById(id);
        if (success) {
            return Result.success("删除成功");
        } else {
            return Result.error("删除失败");
        }
    }
}